package cn.itcast.dmp.untils

import cn.itcast.dmp.DmpApp.logInfo
import cn.itcast.dmp.config.AppConfigHelper
import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession

object SparkSessionUtils {
  def createSparkSession(appClass: Class[_]): SparkSession = {
    // TODO：1、构建SparkSession实例对象，设置相关应用参数
    // a. 创建SparkConf实例对象，设置应用名称
    val sparkConf = new SparkConf()
      .setAppName(appClass.getSimpleName.stripSuffix("$"))

    // b. 判断应用运行模式（本地模式还是集群模式，如是本地模式，直接设置值；如是集群模式，通过spark-submit --master）
    if(AppConfigHelper.SPARK_APP_LOCAL_MODE.toBoolean){
      sparkConf.setMaster(AppConfigHelper.SPARK_APP_MASTER)
    }

    // c. 建造者模式创建SparkSession实例对象
    import cn.itcast.dmp.config.SparkConfigHelper._
    val session: SparkSession = SparkSession.builder()
      .config(sparkConf) // 加载SparkConf中信息
      // 加载应用配置信息， 通过隐式转换（自定义隐式转换函数实现）
      .loadSparkConf()
      .getOrCreate()

    // d. 返回会话实例
    session
    }

}

